/* 
 * File:   parser.cpp
 * Author: emi
 * 
 * Created on 22 de enero de 2014, 11:05 AM
 */

#include <iostream>
#include <fstream>
#include <string>
#include <math.h>
#include <fstream>
#include <string.h>

#include "parser.h"

#include <boost/graph/adjacency_list.hpp>

using namespace std;
using namespace boost;


//
//float distEuclidia(int x1, int y1, int x2, int y2) {
//    return sqrt((x1 - x2)*(x1 - x2)+(y1 - y2)*(y1 - y2));
//}

Parser::Parser() {
}

Parser::Parser(const Parser& aCopiar) {
}

Parser::Parser(const char* ruta) {
    //FIXME hacer que la ruta funcione
    char* rutaCompleta;
//    sprintf(rutaCompleta, "%s%s", "/home/emi/", ruta);
//    ifstream myfile(rutaCompleta);
//    string line;
//
//    //FIXME hacer funcionar el método provado
//    if (myfile.is_open()) {
//        while (getline(myfile, line)) {
//            //parserTSP(line, myfile);
//            if (line.find(DIMENSION) != string::npos) {
//                int dim;
//                sscanf(line.data(), "%*s%d", &dim);
//                this->dimension = dim;
//                costos = new float*[dimension];
//                posX = new int[dimension];
//                posY = new int[dimension];
//            }
//            if (line.find(NODOS_2D) != string::npos) {
//                getline(myfile, line);
//                int nodo, x, y, cont;
//                cont = 0;
//                do {
//                    cout << "+++- " << line << endl;
//                    char* str_nodo = new char[200];
//                    strcpy(str_nodo, line.data());
//                    sscanf(str_nodo, "%d  %d %d", &nodo, &x, &y);
//                    //Creo el nodo
//                    costos[nodo] = new float[dimension];
//                    costos[nodo][nodo] = 0;
//                    //guardo su posicion en el plano
//                    posX[nodo] = x;
//                    posY[nodo] = y;
//                    for (int i = 0; i < cont; i++) {
//                        //calculo la distancia contra el resto de los nodos
//                        float dist = distEuclidia(posX[nodo], posY[nodo], posX[i], posY[i]);
//                        costos[i][nodo] = dist;
//                        costos[nodo][i] = dist;
//                    }
//                    getline(myfile, line);
//                    cont++;
//                } while (line.compare("EOF") != 0);
//            }
//            cout << "- " << line << endl;
//        }
//        myfile.close();
//    } else cout << "Unable to open file";
    test();
}

Parser::~Parser() {
}

void Parser::parserTSP(string line, ifstream myfile) {
//    if (line.find(DIMENSION)) {
//        sscanf(line.data(), "%s: %d", dimension);
//        costos = new float*[dimension];
//    }
//    if (line.find(NODOS_2D)) {
//        getline(myfile, line);
//        int nodo, x, y, cont;
//        cont = 0;
//        do {
//            cont++;
//            sscanf(line.data(), "%d %d %d", nodo, x, y);
//            costos[nodo] = new float[dimension];
//            costos[nodo][nodo] = 0;
//            posX[nodo] = x;
//            posY[nodo] = y;
//            for (int i = 0; i < cont; i++) {
//                float dist = distEuclidia(posX[nodo], posY[nodo], posX[i], posY[i]);
//                costos[i][nodo] = dist;
//                costos[nodo][i] = dist;
//            }
//        } while (line.compare("EOF") == 0);
//    }
//    cout << "- " << line << endl;
}

void Parser::test() {
    cout << "Test :)" << endl;
    for (int i = 0; i < dimension; i++) {
        cout << "x:" << posX[i] << "  y:" << posY[i] << endl;
        ;
    }
    for (int i = 0; i < dimension; i++) {
        for (int j = 0; j < dimension; j++) {
            cout << costos[i][j] << " ";
        }
        cout << "------" << endl;
    }
}
